#ifndef ALTMAPEDITORPLUGIN_H
#define ALTMAPEDTIORPLUGIN_H

#include "altplugin.h"

#include <QStringList>

class QWidget;

namespace Alt {
     class AbstractMapEditor;
     class Map;

     /*! Base class for map editor plugins.
          A map editor plugin provides editor widgets for the map types it supports. */
     class MapEditorPlugin : public virtual Plugin {
     public:
          /*! Creates a map editor widget. The caller will take ownership of the generated widget.
               \param type The type of map to be edited.
               \param fileName The name of the file name being opened. If this string is empty, a new map is being created.
                    Otherwise, the filename will be guaranteed to be readable, and holds a map of the proper type.
               \param parent The parent widget. */
          virtual AbstractMapEditor* createMapEditor(const QString& type, const QString& fileName = "", QWidget* parent = 0) const = 0;

          virtual QString pluginDescription() const = 0;

          virtual QString pluginName() const = 0;

          /*! A list of all of the map types that this plugin can provide editors for. */
          virtual QStringList supportedMapTypes() const = 0;
     };
}

Q_DECLARE_INTERFACE(Alt::MapEditorPlugin, "com.herenbdy.Alt.AltMapEditorPlugin/0.1.0")

#endif
